home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 July / macformat-026.iso / mac / Shareware City / Science / µSim 1.0 folder / Libs / Independents.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-03-10  |  3.4 KB  |  178 lines  |  [TEXT/MMCC]

  1. #include    "Independents.h"
  2.  
  3.  
  4. StringPtr GetPtrIndHString(Handle resH, unsigned short index)
  5. {
  6. unsigned short    *compPtr = (unsigned short *)*resH;
  7. unsigned char    *spanPtr;
  8. unsigned short    i = index;
  9.  
  10. if (*compPtr++ <= i)
  11.     spanPtr = nil;
  12. else {
  13.     spanPtr = (unsigned char *)compPtr;
  14.     while (i) {
  15.         spanPtr += *spanPtr++;
  16.         i--;
  17.         }
  18.     }
  19.  
  20. return (StringPtr)spanPtr;
  21. }
  22.  
  23. void GetIndHString(StringPtr dest, Handle resH, unsigned short index)
  24. {
  25. unsigned short    *compPtr = (unsigned short *)*resH;
  26. unsigned char    *spanPtr;
  27. unsigned short    i = index;
  28.  
  29. if (*compPtr++ <= i)
  30.     StrLength(dest) = 0;
  31. else {
  32.     spanPtr = (unsigned char *)compPtr;
  33.     while (i) {
  34.         spanPtr += *spanPtr++;
  35.         i--;
  36.         }
  37.     BlockMoveData(spanPtr, dest, *spanPtr + 1L);
  38.     }
  39.  
  40. return;
  41. }
  42. /*
  43. short KeyState(unsigned short k )
  44. // k =  any keyboard scan code, 0-127
  45. {
  46. KeyMap    km;
  47.  
  48. GetKeys(km);
  49. return ( ( *((unsigned char *)km + (k>>3)) >> (k & 7) ) & 1);
  50. }
  51. */
  52.  
  53. Boolean ModifiersState(short mask)
  54. {
  55. EventRecord    ev;
  56.  
  57. (void) EventAvail(0, &ev);
  58. return (ev.modifiers & mask) != 0;
  59. }
  60.  
  61. OSType Str2OSType(ConstStr255Param theStr)
  62. {
  63. OSType result;
  64. Ptr    source, dest;
  65. unsigned char i = StrLength(theStr);
  66.  
  67. source = (Ptr)theStr + 1;
  68. dest = (Ptr)&result;
  69. *dest++ = *source++;
  70. *dest++ = *source++;
  71. *dest++ = *source++;
  72. *dest++ = *source++;
  73.  
  74. if (i < 4)
  75.     while (i < 4) {
  76.         *--dest = 0x20;
  77.         i++;
  78.         }
  79.  
  80. return result;
  81. }
  82.  
  83. void OSType2Str(OSType typ, StringPtr theStr)
  84. {
  85. register StringPtr    tempPtr = theStr;
  86. register StringPtr    sourcePtr = (StringPtr)&typ;
  87.  
  88. *tempPtr++ = 4;
  89. *tempPtr++ = *sourcePtr++;
  90. *tempPtr++ = *sourcePtr++;
  91. *tempPtr++ = *sourcePtr++;
  92. *tempPtr = *sourcePtr;
  93. }
  94.  
  95. Handle GetFullPath(const FSSpecPtr fss, Boolean AUXpresent)
  96. {
  97. CInfoPBRec    mypb;
  98. Str63    dirName;
  99. Handle    fullPath;
  100. Size    hCurSize;
  101. OSErr    err = noErr;
  102.  
  103. fullPath = NewHandle(StrLength(fss->name));
  104. if (fullPath) {
  105.     BlockMoveData(fss->name + 1, *fullPath, StrLength(fss->name));
  106.     if (fss->parID != fsRtParID) {
  107.         mypb.dirInfo.ioNamePtr = dirName;
  108.         mypb.dirInfo.ioVRefNum = fss->vRefNum;
  109.         mypb.dirInfo.ioDrParID = fss->parID;
  110.         mypb.dirInfo.ioFDirIndex = -1;
  111.         do {
  112.             mypb.dirInfo.ioDrDirID = mypb.dirInfo.ioDrParID;
  113.             err = PBGetCatInfoSync(&mypb);
  114.             if (err)
  115.                 break;
  116.             else {
  117.                 if (AUXpresent) {
  118.                     if (dirName[1] != '/') {
  119.                         StrLength(dirName) += 1;
  120.                         dirName[StrLength(dirName)] = '/';
  121.                         }
  122.                     }
  123.                 else {
  124.                     StrLength(dirName) += 1;
  125.                     dirName[StrLength(dirName)] = ':';
  126.                     }
  127.                 hCurSize = InlineGetHandleSize(fullPath);
  128.                 SetHandleSize(fullPath, hCurSize + StrLength(dirName));
  129.                 err = MemError();
  130.                 if (err)
  131.                     break;
  132.                 else {
  133.                     BlockMoveData(*fullPath, *fullPath + StrLength(dirName), hCurSize);
  134.                     BlockMoveData(dirName + 1, *fullPath, StrLength(dirName));
  135.                     }
  136.                 }
  137.             }
  138.         while (mypb.dirInfo.ioDrDirID != fsRtDirID);
  139.         }
  140.     }
  141. if (err) {
  142.     DisposeHandle(fullPath);
  143.     fullPath = nil;
  144.     }
  145. return fullPath;
  146. }
  147.  
  148. void fabc2pstr(unsigned char *cs, StringPtr destps)
  149. {
  150. unsigned char *scanPtr = cs;
  151. unsigned char *destPtr = destps + 1;
  152. unsigned short count = 0;
  153.  
  154. while ((*destPtr++ = *scanPtr++) && count < UCHAR_MAX)
  155.     count++;
  156. StrLength(destps) = count;
  157. }
  158.  
  159. Boolean IsOnScreen(const RectPtr r)
  160. {
  161. Point    topRight;
  162.  
  163. topRight.h = r->right;
  164. topRight.v = r->top;
  165. return (PtInRgn(topLeft(*r), GetGrayRgn()) || (PtInRgn(topRight, GetGrayRgn())));
  166. }
  167.  
  168. Boolean IsOnScreenWeak(Point pt)
  169. {
  170. Rect    box;
  171.  
  172. topLeft(box) = pt;
  173. box.bottom = box.top + qd.thePort->portRect.bottom - qd.thePort->portRect.top;
  174. box.right = box.left + qd.thePort->portRect.right - qd.thePort->portRect.left;
  175. return IsOnScreen(&box);
  176. }
  177.  
  178.